<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>OOP 变更日志</title>
<link media="all" rel="stylesheet" type="text/css" href="styles/03e73060321a0a848018724a6c83de7f-theme-base.css" />
<link media="all" rel="stylesheet" type="text/css" href="styles/03e73060321a0a848018724a6c83de7f-theme-medium.css" />

 </head>
 <body class="docs"><div class="navbar navbar-fixed-top">
  <div class="navbar-inner clearfix">
    <ul class="nav" style="width: 100%">
      <li style="float: left;"><a href="language.oop5.variance.html">« 协变与逆变</a></li>
      <li style="float: right;"><a href="language.namespaces.html">命名空间 »</a></li>
    </ul>
  </div>
</div>
<div id="breadcrumbs" class="clearfix">
  <ul class="breadcrumbs-container">
    <li><a href="index.html">PHP Manual</a></li>
    <li><a href="language.oop5.html">类与对象</a></li>
    <li>OOP 变更日志</li>
  </ul>
</div>
<div id="layout">
  <div id="layout-content"><div id="language.oop5.changelog" class="sect1">
 <h2 class="title">OOP 变更日志</h2>
 <p class="para">
  这里只记录了 PHP OOP 模型的变更记录。有关变更功能的具体描述与其他相关注意事项，可以到具体的 OOP 文档链接中查看。
 </p>
 <p class="para">
  <table class="doctable informaltable">
   
    <thead>
     <tr>
      <th>版本</th>
      <th>说明</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td>8.1.0</td>
      <td>
       添加：支持类常量的 <span class="modifier">final</span> 修饰符。此外，接口常量默认可覆盖。
      </td>
     </tr>

     <tr>
      <td>8.0.0</td>
      <td>
       添加：支持 <a href="language.oop5.basic.html#language.oop5.basic.nullsafe" class="link">nullsafe 操作符</a> <em class="emphasis">?-&gt;</em> 来访问可能为空的对象中的属性和方法。
      </td>
     </tr>

     <tr>
      <td>7.4.0</td>
      <td>
       已变更：可以通过 <span class="function"><strong>__toString()</strong></span> 抛出异常。
      </td>
     </tr>

     <tr>
      <td>7.4.0</td>
      <td>
       增加：支持限制返回类型协变与参数类型逆变。
       如果使用自动加载，则完整的差异支持可用。
       在一个文件内，只有非循环类型引用是可能的。
      </td>
     </tr>

     <tr>
      <td>7.4.0</td>
      <td>
       增加：可以给类属性增加类型。
      </td>
     </tr>

     <tr>
      <td>7.3.0</td>
      <td>
       不兼容：不再支持对使用非 <span class="type">int</span> 键的 <span class="classname"><a href="class.traversable.html" class="classname">Traversable</a></span>
       进行参数解包。该功能不是有意设计的，因此被删除。
      </td>
     </tr>

     <tr>
      <td>7.3.0</td>
      <td>
       不兼容：在以前的版本中，可以通过分配一个引用来分离静态属性，这一特性已被移除。
      </td>
     </tr>

     <tr>
      <td>7.3.0</td>
      <td>
       已变更： <a href="language.operators.type.html" class="link">instanceof</a>
       运算符允许将字面量作为第一个操作数，在这种情况下，结果始终是 <strong><code>false</code></strong> 。
      </td>
     </tr>

     <tr>
      <td>7.2.0</td>
      <td>
       废弃：<span class="function"><a href="function.autoload.html" class="function">__autoload()</a></span> 方法已被废弃，请使用
       <span class="function"><a href="function.spl-autoload-register.html" class="function">spl_autoload_register()</a></span> 代替。
      </td>
     </tr>

     <tr>
      <td>7.2.0</td>
      <td>
       已变更：<code class="literal">object</code> 做为保留关键字，不允许做为
       classes、interfaces、traits 的名称。
      </td>
     </tr>

     <tr>
      <td>7.2.0</td>
      <td>
       已变更：分组引入命名空间时，允许行尾添加多余的逗号分隔符。
      </td>
     </tr>

     <tr>
      <td>7.2.0</td>
      <td>
       已变更：参数类型扩展。
       现在可以省略来自重写方法和从接口实现的参数类型。
      </td>
     </tr>

     <tr>
      <td>7.2.0</td>
      <td>
       已变更：当一个抽象类（abstract class）继承另一个抽象类时，抽象的方法现在可以被覆写。
      </td>
     </tr>

     <tr>
      <td>7.1.0</td>
      <td>
       已变更：增加系统保留关键字 <code class="literal">void</code> 和 <code class="literal">iterable</code>，不允许做为
       classes、interfaces、traits 的名称。
      </td>
     </tr>

     <tr>
      <td>7.1.0</td>
      <td>
       增加：类常量增加了
       <a href="language.oop5.visibility.html#language.oop5.visiblity-constants" class="link">访问控制（可见性）</a>。
      </td>
     </tr>

     <tr>
      <td>7.0.0</td>
      <td>
       废弃：对未声明为静态的方法（<a href="language.oop5.static.html" class="link">Static</a>）的静态调用。
      </td>
     </tr>

     <tr>
      <td>7.0.0</td>
      <td>
       废弃：PHP 4 风格的构造函数 <a href="language.oop5.decon.html" class="link">constructor</a> 已被废弃。
      </td>
     </tr>

     <tr>
      <td>7.0.0</td>
      <td>
       增加： <em class="emphasis">use</em> 
       组声明：同一个命名空间导入的类、函数、常量现在可以组合在一个 use 语句中。
      </td>
     </tr>

     <tr>
      <td>7.0.0</td>
      <td>
       增加：使用 <code class="literal">new class</code> 语法来支持
       <a href="language.oop5.anonymous.html" class="link">匿名类</a>。
      </td>
     </tr>

     <tr>
      <td>7.0.0</td>
      <td>
       不兼容：遍历非 <span class="classname"><a href="class.traversable.html" class="classname">Traversable</a></span> <span class="type">object</span> 将跟遍历引用 <span class="type">array</span>
       具有相同的行为。
      </td>
     </tr>

     <tr>
      <td>7.0.0</td>
      <td>
       已变更：<a href="language.oop5.traits.html" class="link">traits</a> 里定义兼容的属性不再产生错误信息。
      </td>
     </tr>

     <tr>
      <td>5.6.0</td>
      <td>
       增加: <a href="language.oop5.magic.html#object.debuginfo" class="link">__debugInfo()</a> 方法。
      </td>
     </tr>

     <tr>
      <td>5.5.0</td>
      <td>
       增加: <a href="language.oop5.basic.html#language.oop5.basic.class.class" class="link">::class</a> 魔法常量。
      </td>
     </tr>

     <tr>
      <td>5.5.0</td>
      <td>
       增加: <a href="language.exceptions.html" class="link">finally</a> 来处理异常。
      </td>
     </tr>

     <tr>
      <td>5.4.0</td>
      <td>
       增加： <a href="language.oop5.traits.html" class="link">traits</a>。
      </td>
     </tr>

     <tr>
      <td>5.4.0</td>
      <td>
       已变更：如果一个<a href="language.oop5.abstract.html" class="link">抽象</a> 类定义了 <a href="language.oop5.decon.html" class="link">
       构造函数</a> 的签名，它将必须被实现。
      </td>
     </tr>

     <tr>
      <td>5.3.3</td>
      <td>
       已变更： <a href="language.namespaces.html" class="link">命名空间</a> 中和类同名的方法不再被作为 <a href="language.oop5.decon.html" class="link">构造函数</a>。这个变更不影响非命名空间中的类。
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       已变更：类实现接口的方法所具有的默认值不再需要和接口的默认值一致。
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       已变更： 现在它也能够通过一个变量来引用一个类（例如，<code class="literal">echo $classname::constant;</code>）。
       这个变量的值不能是一个保留关键词（比如，<code class="literal">self</code>、<code class="literal">parent</code> 或 <code class="literal">static</code>）。
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       已变更： 如果<a href="language.oop5.overloading.html" class="link">重载</a>方法被定义为 <a href="language.oop5.static.html" class="link">static</a> 将导致一个 <strong><code>E_WARNING</code></strong> 级别的错误。
       同时它也需要强制使用 public 的可见性。
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       已变更： 在 5.3.0 之前的版本，<span class="function"><a href="function.autoload.html" class="function">__autoload()</a></span> 函数里抛出的异常不能被 <a href="language.exceptions.html" class="link">catch</a> 块结构捕获，并会导致一个致命错误。
       现在在一个前提下 <a href="language.exceptions.html" class="link">catch</a> 块能够捕获 __autoload 函数中抛出的错误。如果抛出一个自定义异常，这个自定义异常的类必须是可用的。否则 __autoload 函数可能递归自动加载这个自定义异常类。
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       新增： <a href="language.oop5.overloading.html" class="link">__callStatic</a> 方法。
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       新增： <a href="language.types.string.html#language.types.string.syntax.heredoc" class="link">heredoc</a>
       和 <a href="language.types.string.html#language.types.string.syntax.nowdoc" class="link">nowdoc</a>
       支持类的 <em class="emphasis">常量</em> 和属性的定义。
       注意：heredoc 值必须和双引号字符串遵循同样的规则（比如，变量将被替换）。
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       新增： <a href="language.oop5.late-static-bindings.html" class="link">后期静态绑定</a>。
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       新增： <a href="language.oop5.magic.html#object.invoke" class="link">__invoke</a> 方法。
      </td>
     </tr>

     <tr>
      <td>5.2.0</td>
      <td>
       已变更：<a href="language.oop5.magic.html#object.tostring" class="link">__toString</a> 方法仅在直接与  <span class="function"><a href="function.echo.html" class="function">echo</a></span> 或 <span class="function"><a href="function.print.html" class="function">print</a></span> 使用时被调用。但是现在它能在任何字符串上下文被调用（比如在 <span class="function"><a href="function.printf.html" class="function">printf()</a></span> 中使用 <code class="literal">%s</code> ），但不是在其他类型的上下文被调用（例如 <code class="literal">%d</code> 修饰符）。
       自 PHP 5.2.0 起，将不具有 <a href="language.oop5.magic.html#object.tostring" class="link">__toString</a> 方法的对象转化为字符串将导致一个 <strong><code>E_RECOVERABLE_ERROR</code></strong> 级别的错误。
      </td>
     </tr>

     <tr>
      <td>5.1.3</td>
      <td>
       已变更：在 PHP 5 之前的版本，<code class="literal">var</code> 的使用已被废弃，并将产生一个 <strong><code>E_STRICT</code></strong> 级别的错误。现在它不再被废弃，因此也不会产生错误。
      </td>
     </tr>

     <tr>
      <td>5.1.0</td>
      <td>
       已变更：现在 <a href="language.oop5.magic.html#object.set-state" class="link">__set_state</a> 静态方法在 <span class="function"><a href="function.var-export.html" class="function">var_export()</a></span> 导出类时会被调用。
      </td>
     </tr>

     <tr>
      <td>5.1.0</td>
      <td>
       新增：<a href="language.oop5.overloading.html#object.isset" class="link">__isset</a> 和 <a href="language.oop5.overloading.html#object.unset" class="link">__unset</a> 方法。
      </td>
     </tr>

    </tbody>
   
  </table>

 </p>
</div></div></div></body></html>